package com.xiaolun.chapter13

object CurryDemo01 {
  def main(args: Array[String]): Unit = {
    //使用常规的方式完成
    def mul(x: Int, y: Int) = x * y

    println(mul(10, 10))

    //
    /**
     * 使用闭包的方式完成
     * mulCurry(x: Int)表示一个函数，里面需要传入一个参数
     * (y: Int) => x * y 表示一个返回值
     *
     * @param x
     * @return
     */

    def mulCurry(x: Int) = (y: Int) => x * y

    println(mulCurry(10)(9))

    println("--------------柯里化函数mulCurry2-------------------------")

    //使用函数柯里化完成
    def mulCurry2(x: Int)(y: Int) = x * y

    var curry = mulCurry2(3) _
    println(curry(4))

    println("--------------柯里化函数mulCurry3-------------------------")

    def mulCurry3(x: Int)(implicit y: Int = 10) = x * y
    //  当在下面代码中定义implicit时，下面这一句代码会报错
    //    println(mulCurry3(2))
    println(mulCurry3(2)(2))

    println("--------------柯里化函数mulCurry3,定义隐式值-------------------------")
    implicit var z: Int = 100
    println(mulCurry3(2)) //2*100=200
  }
}
